當我們想要像在Java一樣創建一個介面時(只有方法簽名而沒有實作),我們可以使用特徵。
trait HasFourLegs:
def fur(): Unit
def running(speed: Double): Unit
//如果一個類別extends特徵時沒有實作它全部的抽象方法,那這個類別就要宣告為抽象類別
abstract class Cat extends HasFourLegs:
class Dog extends HasFourLegs:
def fur(): Unit = println("golden!")
def running(speed: Double): Unit = println(s"Speed is $speed km/hr")
當我們想要宣告特徵的屬性但是又不想設定初始值時,也就是說宣告為抽象。
trait Pizza:
def Topping: Int
class Food extends Pizza:
val Topping = 3
一個特徵(trait)的屬性(field)可以是抽象或具體的
如果給它一個值,那它就是具體的。反之,則為抽象的。
trait Pet:
def talk() = println("Hi")
def come(): Unit
class Dog extends Pet:
def come() = println("bark~")
class Cat extends Pet:
override def talk() = println("meow")
def come() = println("No.")